package infb.dao;

import infb.modelo.Medicamentos;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;


@Stateless(mappedName="MedicamentosEJB")
public class MedicamentosBean implements MedicamentosInterfaz {
    @PersistenceContext
    private EntityManager em;

    public void create(Medicamentos medicamentos) {
        em.persist(medicamentos);
    }

    public void edit(Medicamentos medicamentos) {
        em.merge(medicamentos);
    }

    public void remove(Medicamentos medicamentos) {
        em.remove(em.merge(medicamentos));
    }

    public Medicamentos find(Object id) {
        return em.find(Medicamentos.class, id);
    }

    public List<Medicamentos> findAll() {
        return em.createQuery("select m from Medicamentos m order by m.nombre asc").getResultList();
    }

    /*
     * Metodo para comprobar si un medicamento ya esta registrado en la base de datos
     */
    public boolean estaRegistrado(String nombre) {
        List resultados = em.createQuery("select m from Medicamentos m where upper(m.nombre)=upper(?1)")
        .setParameter(1, nombre)
        .getResultList();

        return (resultados.isEmpty() ? false : true);
    }

    /*
     * Metodo asociado al formulario de busqueda de medicamentos
     */
    public List busquedaAvanzada(String nombre, String categoria) {

        nombre=nombre.toUpperCase();
        String sql="select m from Medicamentos m where upper(m.nombre) like ?1 ";
        if(!categoria.equals("")){
            sql+="and m.categoria.categoria=?2 ";
        }
        sql+="order by m.nombre asc";
        Query consulta=(Query)em.createQuery(sql);
        consulta.setParameter(1, nombre+"%");
        if(!categoria.equals("")){
            consulta.setParameter(2, categoria);
        }

        return consulta.getResultList();
    }

}
